package com.itc.system.util;

import com.itc.system.api.domain.SysDept;

import java.util.ArrayList;
import java.util.List;

public  class TreeUtil {
    // 流程：数据库查出的菜单记录装载在承载菜单的列表中---
    //         构建树（获取根节点，遍历根节点，对每一个根节点构建子树）---得到最终树形菜单

    // 承载菜单的列表
    private List<SysDept> menuList = new ArrayList<>();
    // 带参构造器，将数据库中的菜单数据记录，装载在我们承载菜单的列表中
    public    TreeUtil(List<SysDept> menuList){
        this.menuList = menuList;
    }

    // 获取根节点
    public List<SysDept> getRootNode(){
        List<SysDept> rootNode = new ArrayList<>();
        for (SysDept menu : menuList) {
            if (menu.getParentId()==0){
                rootNode.add(menu);
            }
        }
        return rootNode;
    }

    // 构建子树
    public SysDept buildChildren(SysDept rootNode) {
        List<SysDept> childrenTree = new ArrayList<>();
        for (SysDept menu : menuList) {
            if (menu.getParentId().equals(rootNode.getDeptId())) {
                childrenTree.add(buildChildren(menu));
            }
        }

        // 将 childrenTree 转换为字符串
        StringBuilder sb = new StringBuilder();
        for (SysDept dept : childrenTree) {
            sb.append(dept.toString()); // 假设 SysDept 类有合适的 toString 方法
            sb.append(", "); // 添加分隔符
        }
        String childrenAsString = sb.toString();
        // 如果有必要，去除末尾的分隔符
        if (!childrenTree.isEmpty()) {
            childrenAsString = childrenAsString.substring(0, childrenAsString.length() - 2);
        }

        // 将 childrenAsString 赋值给 rootNode
        rootNode.setAncestors(childrenAsString);

        return rootNode;
    }

    // 构建树
    public List<SysDept> buildTree(){
        List<SysDept> menus = getRootNode();
        for (SysDept menu : menus) {
            buildChildren(menu);
        }
        return menus;
    }

}
